import axios, {
  AxiosResponse,
  AxiosError,
  InternalAxiosRequestConfig,
} from 'axios';
import { message } from 'ant-design-vue';
import router from '@/router';

const service = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  timeout: 5000,
});

//请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    const token = localStorage.getItem('LOGICFLOW-CHAT-TOKEN');
    if (!token) return config;

    config.headers['Authorization'] = `${token}`;
    return config;
  },
  (error: AxiosError) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse<any, any>) => {
    const res = response.data;

    if (res.code !== 200) {
      console.log(res);

      // 例如处理错误信息
      return Promise.reject(new Error(res.message || 'Error'));
    } else {
      return res;
    }
  },
  (error: any) => {
    // 对响应错误做点什么
    if (error.response) {
      message.warning(error.response.data?.message || '请求失败，请稍后再试');

      switch (error.response.status) {
        case 401:
          // 例如处理401错误
          router.push('/login');
          break;
        // 其他错误处理
      }
    }
    return Promise.reject(error);
  },
);

export default service;
